package com.example.dell.fastshopping.network;

import com.example.dell.fastshopping.DuoBao.entity.RoundResult;
import com.example.dell.fastshopping.Trade.Recharge;
import com.example.dell.fastshopping.mall.entity.HeadTab;
import com.example.dell.fastshopping.mall.entity.MallEntity;
import com.example.dell.fastshopping.DuoBao.entity.PriductInfo;
import com.example.dell.fastshopping.mall.entity.DuoBaoMenu;
import com.example.dell.fastshopping.mall.entity.ServerTime;
import com.example.dell.fastshopping.network.http.BaseResponse;
import com.example.dell.fastshopping.order.OrderInfo;
import com.example.dell.fastshopping.product.BannerEntity;
import com.example.dell.fastshopping.product.Product;
import com.example.dell.fastshopping.product.ProductMenu;
import com.example.dell.fastshopping.user.address.MyAddress;
import com.example.dell.fastshopping.user.bank.BankCard;
import com.example.dell.fastshopping.user.entity.Balance;
import com.example.dell.fastshopping.user.entity.IntegralBaseInformation;
import com.example.dell.fastshopping.user.entity.IntegralDetail;
import com.example.dell.fastshopping.user.entity.UserInfo;
import com.example.dell.fastshopping.user.task.CodeInfo;
import com.example.dell.fastshopping.user.task.TaskType;
import com.youth.banner.Banner;

import java.util.List;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * Created by ${YSH} on 2019/4/24.
 * 描述        ${TODO}
 * <p>
 * 更新者       $author$
 * 更新时间     $Data$
 * 描述         ${TODO}
 */
public interface ApiService {


    @GET("shortMessage/sendLoginCode")
    Observable<BaseResponse> loginCode(@Query("phone") String phone);

    @POST("user/login")
    Observable<BaseResponse<UserInfo>> login(@Body RequestBody body);

    @GET("shortMessage/sendRegCode")
    Observable<BaseResponse> registCode(@Query("phone") String phone);

    @POST("register/userRegister")
    Observable<BaseResponse> regist(@Body RequestBody body);

    @GET("shortMessage/sendResetPwdCode")
    Observable<BaseResponse> resetCode(@Query("phone") String phone);

    @POST("register/resetPwd")
    Observable<BaseResponse> reset(@Body RequestBody body);

    //获取竞拍档 列表 - get
    @GET("auctionGrade/getGradeList")
    Observable<BaseResponse<List<DuoBaoMenu>>> getMenuList();


    //获取竞拍场 列表
    @GET("auctionClass/getAuctionClassList")
    Observable<BaseResponse<MallEntity>> getAuctionClassList(@Query("auctionGradeId") int auctionGradeId, @Query("pageNum") int pageNum, @Query("pageSize") int pageSize, @Query("status") int status);

    //依据商品id 查询对应商品
    @GET("product/findProductById")
    Observable<BaseResponse<PriductInfo>> getProductinfo(@Query("id") int id);

    //依据竞拍场id和轮次 校验本次竞拍的时间 (1.刚进入详情页,2.每轮结束调用)
    @POST("detail/checkServerTime")
    Observable<BaseResponse<ServerTime>> checkServerTime(@Body RequestBody body);

    //竞拍操作
    //userId-用户id | auctionRoundsId-轮次id | userName-用户名 | auctionClassId-竞拍场ID 
    @POST("doAuction/do")
    Observable<BaseResponse> doJinPaiAction(@Body RequestBody body);

    // 参数: id-当前轮次id | currentRounds-当前第几轮 | auctionClassId-竞拍场ID
    @POST("detail/settleCurrentRound")
    Observable<BaseResponse<RoundResult>> getCurrentRoundResult(@Body RequestBody body);


    //    保证金 界面 - get
//    当前保证金 接口: /margin/findUserMargin
    @GET("margin/findUserMargin")
    Observable<BaseResponse> getMyAllMoney();

    //保证金列表 接口: /margin/findGradeLeftMargin
    @GET("margin/findGradeLeftMargin")
    Observable<BaseResponse<List<UserInfo.Amounts>>> getMarginType();

    // 保证金 明细列表分页 - get pageNum pageSize
    @GET("marginInfo/getMarginList")
    Observable<BaseResponse> getEnsureMoneyHistory(@Query("pageNum") int pageNum, @Query("pageSize") int pageSize);

    //积分 界面 - get 列表 pageNum pageSize
    //type-种类种类: (1.消耗/2.提现/3.加价/4.返利/5.竞拍轮次积分/6.竞拍得主积分/7.奖励/
    //	8.邀请qq群任务/9.邀请微信群任务/10.邀请微信公众号任务/11.微信分享任务/12.邀请注册任务)
    @GET("integralDetail/findIntegralDetailPage")
    Observable<BaseResponse<IntegralDetail>> findIntegralDetailPage(@Query("pageNum") int pageNum, @Query("pageSize") int pageSize);

    //查询用户当前积分 - get
    //接口: /user/getIntegral
    // 返回: integral-积分  price-当前积分价格  status-上涨:1不变:0下跌:-1
    @GET("user/getIntegral")
    Observable<BaseResponse<IntegralBaseInformation>> getUserIntegral();

    //  任务界面的接口
//    接口: /task/findOneTask
    @GET("task/findOneTask")
    Observable<BaseResponse<TaskType>> getTaskType();

    //    我的任务---邀请查询二维码信息 - get
//    依据type查询对象 (1:qq群 2:微信群 3:公众号)
//    接口: /groupManage/findGroup
//    参数: type(1:qq群 2:微信群 3:公众号)
    @GET("groupManage/findGroup")
    Observable<BaseResponse<CodeInfo>> getQrCode(@Query("type") int type);

//    qq群 微信群 公众号 校验验证码 - post
//    接口: /groupManage/checkYZM
//    参数: groupType-1:qq群 2:微信群 3:公众号   yzm-验证码

    @POST("groupManage/checkYZM")
    Observable<BaseResponse> checkYZM(@Body RequestBody body);

    //    我的任务---领积分 - post
////    接口: /integralDetail/getIntegral
////    说明: 领过积分的,列表查询时会设置成-1,代表已完成状态
////    参数: type-种类: (1.消耗/2.提现/3.加价/4.返利/5.竞拍轮次积分/6.竞拍得主积分/7.奖励/8.邀请qq群任务/
////            9.邀请微信群任务/10.邀请微信公众号任务/11.微信分享任务/12.邀请注册任务)
////    retains-放任务id(返回的列表id)
    @POST("integralDetail/getIntegral")
    Observable<BaseResponse> getIntegral(@Body RequestBody body);

    //分页 pageNum pageSize  |  status (订单状态：0待收货 1：待发货 2:待付款 ,全部不用传)
    @GET("orders/getOrderList")
    Observable<BaseResponse<OrderInfo>> getOrderList(@Query("pageNum") int pageNum, @Query("pageSize") int pageSize, @Query("status") Integer status);

    //订单详情
    @GET("orders/getOrderDetailById")
    Observable<BaseResponse<OrderInfo>> getOrderDetial(@Query("id") int id);


    ///orders/updateOrderAddress - post
    //orderAddress发货地址  id订单id
    @POST("orders/updateOrderAddress")
    Observable<BaseResponse> updateAddress(@Body RequestBody body);

    @GET("address/findAddressList")
    Observable<BaseResponse<List<MyAddress>>> getAddressList();

    //删除接口: /address/del - post
    //参数: id收货地址
    @POST("address/del")
    Observable<BaseResponse> deleteAddress(@Body RequestBody body);

    //更新接   口: /address/update - post
    //参数: id地址id userName收货人名字 area地区  phone手机号  address详细地址
    //defaults 0:普通 1:默认
    @POST("address/update")
    Observable<BaseResponse> editAddress(@Body RequestBody body);

    // /address/add
    @POST("address/add")
    Observable<BaseResponse> addAddress(@Body RequestBody body);

    // /user/getUserInfo
    @POST("user/getUserInfo")
    Observable<BaseResponse<UserInfo>> getUserBaseInfo();

    //包含保证金
    @POST("user/getUserInfoDetail")
    Observable<BaseResponse<UserInfo>> getUserInfo();

    @GET("user/logout")
    Observable<BaseResponse> loginOut();

    @POST("user/updateUserInfo")
    Observable<BaseResponse<UserInfo>> edituser(@Body RequestBody body);

    @POST("user/updateUserIcon")
    Observable<BaseResponse<UserInfo>> updateIcon(@Body RequestBody body);

    //获取余额详情
    @GET("balanceDetail/getBalanceDetail")
    Observable<BaseResponse<List<Balance>>> getBalance(@Query("pageNum") int pageNum, @Query("pageSize") int pageSize);

    @GET("shortMessage/sendTiXianCode")
    Observable<BaseResponse> getTradeCode(@Query("phone") String phone);

    @POST("pay/tixian")
    Observable<BaseResponse> extralmoney(@Body RequestBody body);

    @POST("pay/marginECT")
    Observable<BaseResponse> rechargeEnsure(@Body RequestBody body);

    @POST("pay/goPay")
    Observable<BaseResponse<String>> payOrder(@Body RequestBody body);

    @GET("bankCard/getUserCardInfo")
    Observable<BaseResponse<List<BankCard>>> getBankCard();

    @POST("bankCard/addCard")
    Observable<BaseResponse> addBankCard(@Body RequestBody body);

    //删除银行卡 可根据id和卡号都可以
    @POST("bankCard/removeCard")
    Observable<BaseResponse> deleteBank(@Body RequestBody body);

    @GET("bankCard/getCardInfo")
    Observable<BaseResponse<String>> checkBankCard(@Query("cardId") String card);

    //获取竞拍场内的商品类型
    @GET("productType/getParentNode")
    Observable<BaseResponse<List<HeadTab>>> getHeadTable();

    @POST("bankCard/updateCard")
    Observable<BaseResponse> editBankCard(@Body RequestBody body);

    @POST("task/updateTask")
    Observable<BaseResponse> share(@Body RequestBody taskId);

    @GET("productType/getParentNode")
    Observable<BaseResponse<List<ProductMenu>>> getProductMenu();

    @GET("productType/getNodeByParentId")
    Observable<BaseResponse<List<Product>>> getProduct(@Query("id") String id);

    @GET("operationManage/getOperationManage")
    Observable<BaseResponse<List<BannerEntity>>> getProductBanner(@Query("position") int i);
}
